package com.java.simple.study.jvm.memstruct.stack;

/**
 * @author zhoujunlin
 * @date 2022年05月24日 21:54
 * @desc 早期绑定  晚期绑定
 */
public class AnimalTest {

    public void showAnimal(Animal animal) {
        // 晚期绑定  invokevirtual
        animal.eat();
    }

    public void showHunt(Huntable huntable) {
        // 晚期绑定  invokeinterfac
        huntable.hunt();
    }

}

class Animal {

    public void eat() {
        System.out.println("动物进食");
    }

}

interface Huntable {
    void hunt();
}

class Dog extends Animal implements Huntable {

    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }

    @Override
    public void hunt() {
        System.out.println("捕食耗子 多管闲事");
    }
}


class Cat extends Animal implements Huntable {

    public Cat() {
        // 早期绑定 invokespecial
        super();
    }

    public Cat(String name) {
        // 早期绑定 invokespecial
        this();
    }

    @Override
    public void eat() {
        // 早期绑定  invokespecial
        super.eat();
        System.out.println("猫吃鱼");
    }

    @Override
    public void hunt() {
        System.out.println("捕食耗子 天经地义");
    }
}
